Craft from Unsplash
雖然還沒正式成為一位全端工程師或全端開發者,但可以預期若成功轉職,將會有大部分的時間花在「開發產品與解決問題」。若建立日常事務的系統化的架構與流程,將能有依據地持續優化工作成效。
本篇筆記將摘錄截至目前的所有學習,統整出一個實戰流程(或實作備忘錄),以利不斷刻意練習,將解決以下問題:
誰適合閱讀:
以下將完整的全端產品開發流程彙整為一份備忘錄:
npm init -y
並設定 package.json"start": "node app.js",
"dev": "nodemon app.js",
git init
,並新增 .gitignore 排除不必載入版本控制的檔案# OS X
.DS_Store*
Icon?
._*
# npm
node_modules
*.log
*.gz
$ git add .
$ git commit -m "feat: project init"
npm i express
// Include packages and project related variables
const express = require('express')
const app = express()
const port = 3000
// set routes
app.get('/', (req, res) => {
res.send('Express app coming soon ...')
})
// listen to server
app.listen(port, () => {
console.log(`Express is listening on http://localhost:${port}`)
})
[~] $ cd ~/mongodb/bin/
[~/mongodb/bin] $ ./mongod --dbpath ~/mongodb-data
DB_Name
$ npm i mongoose
// app.js
// 載入 mongoose 並連線到 mongoDB
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost/todo-list', { useNewUrlParser: true, useUnifiedTopology: true })
// 取得資料庫連線狀態
const db = mongoose.connection
db.on('error', () => { // 連線異常處理
console.log('mongodb error 0.0')
})
db.once('open', () => { // 連線成功處理
console.log('mongodb connected ^_^')
})
// todo.js
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const todoSchema = new Schema({
name: {
type: String,
required: true
}
})
module.exports = mongoose.model('Todo', todoSchema)
"seed": "node models/seeds/todoSeeder.js"
const exphbs = require('express-handlebars');
app.engine('hbs', exphbs({ defaultLayout: 'main', extname: '.hbs' }))
app.set('view engine', 'hbs')
// routes/index.js
// 引用 Express 及其路由器
const express = require('express')
const router = express.Router()
// 引用建立好的路由模組
const home = require('./modules/home')
const todos = require('./modules/todos')
// 設定路由
router.use('/', home)
router.use('/todos', todos)
// 匯出路由器
module.exports = router
// config/mongoose.js
// 引用 mongoose
const mongoose = require('mongoose')
// 連線資料庫
mongoose.connect('mongodb://localhost/todo-list', { useNewUrlParser: true, useUnifiedTopology: true })
// 設定連線狀態
const db = mongoose.connection
db.on('error', () => {
console.log('mongodb error!')
})
db.once('open', () => {
console.log('mongodb connected!')
})
// 匯出連線狀態設定
module.exports = db
$ heroku create [project-name]
$ heroku addons:create mongolab -a [project-name]
// Procfile
web: node app.js
// app.js
const PORT = process.env.PORT || 3000
// config/mongoose.js
const MONGODB_URI = process.env.MONGODB_URI || 'mongodb://localhost/todo-list'
mongoose.connect(MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true })
$ git add .
$ git commit -m "chore: heroku init"
$ git remote add heroku [heroku_git_url]
$ git push heroku master
關於本系列更多內容及導讀,請閱讀作者於 Medium 個人專欄 【無限賽局玩家 Infinite Gamer | Publication – 】 上的文章 《用 JavaScript 打造全端產品的入門學習筆記》系列指南。